package com.ictest.detectionflow.mobile;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

import com.ictest.detectionflow.mobile.model.ComponentQueryCondition;

/**
 * 元器件检索活动。
 * 
 * @author ZengE
 * 
 */
public class ComponentSearchActivity extends Activity
{
	/**
	 * 编码存储键值。
	 */
	public final static String KEY_CONDITION = "Condition";

	/**
	 * 检索条件。
	 */
	private ComponentQueryCondition m_Condition;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		// 调用基类实现
		super.onCreate(savedInstanceState);

		// 设置内容视图
		setContentView(R.layout.activity_component_search);

		// 获得返回按钮
		ImageButton cmdBack = (ImageButton) this.findViewById(R.id.cmdBack);

		// 挂接点击事件监听
		cmdBack.setOnClickListener(new View.OnClickListener()
		{
			// 处理点击事件
			public void onClick(View v)
			{
				// 结束页面
				ComponentSearchActivity.this.finish();
			}
		});

		// 获得意图
		Intent intent = this.getIntent();

		// 获得检索条件
		this.m_Condition = (ComponentQueryCondition) intent.getSerializableExtra(ComponentSearchActivity.KEY_CONDITION);

		// 判断条件是否指定
		if (null == this.m_Condition)
		{
			// 创建条件
			this.m_Condition = new ComponentQueryCondition();
		}

		// 创建选中变化监听
		OnCheckedChangeListener listener = new OnCheckedChangeListener()
		{

			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
			{
				// 获得输入控件
				EditText input = (EditText) buttonView.getTag();

				// 判断控件是否有效
				if (null != input)
				{
					// 获得控件编号
					String id = (String) input.getTag();

					// 判断控件类型
					if (id == "Code")
					{
						// 设置属性
						ComponentSearchActivity.this.m_Condition.setUseCode(isChecked);
					}
					else if (id == "Name")
					{
						// 设置属性
						ComponentSearchActivity.this.m_Condition.setUseName(isChecked);
					}
					else if (id == "Manufacturer")
					{
						// 设置属性
						ComponentSearchActivity.this.m_Condition.setUseManufacturer(isChecked);
					}

					// 设置输入控件状态
					input.setEnabled(isChecked);

					// 设置焦点
					input.requestFocus();

					// 获得确定按钮
					Button cmdOK = (Button) ComponentSearchActivity.this.findViewById(R.id.cmdOK);

					// 设置按钮状态
					cmdOK.setEnabled(ComponentSearchActivity.this.isValidCondition(ComponentSearchActivity.this.m_Condition));
				}
			}

		};

		// 获得编码输入框
		EditText txtCode = (EditText) this.findViewById(R.id.txtCode);

		// 获得编码复选框
		CheckBox chkCode = (CheckBox) ComponentSearchActivity.this.findViewById(R.id.chkCode);

		// 设置编码
		txtCode.setText(this.m_Condition.getCode());

		// 设置状态
		txtCode.setEnabled(this.m_Condition.getUseCode());

		// 设置属性
		txtCode.setTag("Code");

		// 设置选中状态
		chkCode.setChecked(this.m_Condition.getUseCode());

		// 绑定属性
		chkCode.setTag(txtCode);

		// 挂接监听
		chkCode.setOnCheckedChangeListener(listener);

		// 获得名称输入框
		EditText txtName = (EditText) this.findViewById(R.id.txtName);

		// 获得名称复选框
		CheckBox chkName = (CheckBox) ComponentSearchActivity.this.findViewById(R.id.chkName);

		// 设置编码
		txtName.setText(this.m_Condition.getName());

		// 设置状态
		txtName.setEnabled(this.m_Condition.getUseName());

		// 设置属性
		txtName.setTag("Name");

		// 设置选中状态
		chkName.setChecked(this.m_Condition.getUseName());

		// 绑定属性
		chkName.setTag(txtName);

		// 挂接监听
		chkName.setOnCheckedChangeListener(listener);

		// 获得生产厂家输入框
		EditText txtManufacturer = (EditText) this.findViewById(R.id.txtManufacturer);

		// 获得厂家复选框
		CheckBox chkManufacturer = (CheckBox) ComponentSearchActivity.this.findViewById(R.id.chkManufacturer);

		// 设置编码
		txtManufacturer.setText(this.m_Condition.getManufacturer());

		// 设置状态
		txtManufacturer.setEnabled(this.m_Condition.getUseManufacturer());

		// 设置属性
		txtManufacturer.setTag("Manufacturer");

		// 设置选中状态
		chkManufacturer.setChecked(this.m_Condition.getUseManufacturer());

		// 绑定属性
		chkManufacturer.setTag(txtManufacturer);

		// 挂接监听
		chkManufacturer.setOnCheckedChangeListener(listener);

		// 获得确定按钮
		Button cmdOK = (Button) this.findViewById(R.id.cmdOK);

		// 挂接点击事件
		cmdOK.setOnClickListener(new OnClickListener()
		{
			// 处理点击事件
			public void onClick(View v)
			{
				// 获得编码输入框
				EditText txtCode = (EditText) findViewById(R.id.txtCode);

				// 获得传递参数
				ComponentSearchActivity.this.m_Condition.setCode(txtCode.getText().toString());

				// 获得名称输入框
				EditText txtName = (EditText) findViewById(R.id.txtName);

				// 获得传递参数
				ComponentSearchActivity.this.m_Condition.setName(txtName.getText().toString());

				// 获得生产厂家输入框
				EditText txtManufacturer = (EditText) findViewById(R.id.txtManufacturer);

				// 获得传递参数
				ComponentSearchActivity.this.m_Condition.setManufacturer(txtManufacturer.getText().toString());

				// 设置按钮状态
				if (!ComponentSearchActivity.this.isValidCondition(ComponentSearchActivity.this.m_Condition))
				{
					// 提示信息
					Toast.makeText(ComponentSearchActivity.this, "请填写检索条件。", Toast.LENGTH_SHORT).show();

					// 返回
					return;
				}

				// 获得意图
				Intent intent = ComponentSearchActivity.this.getIntent();

				// 保存条件
				intent.putExtra(ComponentSearchActivity.KEY_CONDITION, ComponentSearchActivity.this.m_Condition);

				// 设定返回值
				ComponentSearchActivity.this.setResult(Activity.RESULT_OK, intent);

				// 结束活动
				ComponentSearchActivity.this.finish();
			}
		});

		// 获得确定按钮
		Button cmdCancel = (Button) this.findViewById(R.id.cmdCancel);

		// 挂接点击事件
		cmdCancel.setOnClickListener(new OnClickListener()
		{
			// 处理点击事件
			public void onClick(View v)
			{
				// 设定返回值
				ComponentSearchActivity.this.setResult(Activity.RESULT_CANCELED);

				// 结束活动
				ComponentSearchActivity.this.finish();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		return true;
	}

	/**
	 * 判断指定的条件是否为有效检索条件。
	 * 
	 * @param condition
	 *            用于判断的条件。
	 * @return 是否有效。
	 */
	private boolean isValidCondition(ComponentQueryCondition condition)
	{
		// 判断是否使用编号查询
		if (condition.getUseCode() && !Utility.IsNullOrEmpty(condition.getCode()))
		{
			return true;
		}

		// 判断是否使用名称查询
		if (condition.getUseName() && !Utility.IsNullOrEmpty(condition.getName()))
		{
			return true;
		}

		// 判断是否使用厂家查询
		if (condition.getUseManufacturer() && !Utility.IsNullOrEmpty(condition.getManufacturer()))
		{
			return true;
		}

		// 默认返回无效
		return false;
	}
}
